package vo
{
	import cultu.common.message.User;
	import cultu.core.message.Role;
	import cultu.customer.message.Customer;
	import cultu.supplier.message.Supplier;
	
	import utils.CultuConstants;

	public class UserVO
	{
		/**l'utilisateur source*/
		public var srcUser:User;
		
		public function UserVO(o:User)
		{
			if(o)
			{
				srcUser = o;
			}
			else
			{
				srcUser = new User();
			}
		}
		
		/**accesseur sur le role*/
		public function get  roleStr():String
		{
			if(srcUser && srcUser.role)
				return srcUser.role.code;
			
			return '';
		}
		
		/**getter sur le role*/
		public function get role():Role
		{
			return srcUser.role;
		}
		
		/**setter sur le role*/
		public function set role(value:Role):void
		{
			if(value != role)
				srcUser.role = value;
		}
		
		/**est ce que l'utlisateur est un client*/
		public function get isCustomer():Boolean
		{
			return CultuConstants.ROLE_CUSTOMER == roleStr;
		}
		
		/**est ce que l'utilisateur est un fournisseur*/
		public function get isSupplier():Boolean
		{
			return CultuConstants.ROLE_SUPPLIER == roleStr;
		}
		
		/**est ce que l'utilisateur est un admin*/
		public function get isAdmin():Boolean
		{
			return CultuConstants.ROLE_ADMIN == roleStr;
		}
		
		/**est ce que l'utilisateur est un opérateur*/
		public function get isOperator():Boolean
		{
			return CultuConstants.ROLE_OPERATOR == roleStr;
		}
		
		/**accesseur sur le client associé à l'utilisateur*/
		public function get customer():Customer
		{
			if(srcUser)
				return srcUser.customer;
			
			return null;
		}
		
		/**accesseur sur le login*/
		public function get login():String
		{
			if(srcUser)
				return srcUser.login;
			
			return '';
		}
		
		/**setter sur le login*/
		public function set login(value:String):void
		{
			if(srcUser.login != value)
				srcUser.login=value;
		}
		
		/**getter sur le password*/
		public function get password():String
		{
			if(srcUser)
				return srcUser.password;
			
			return '';
		}
		
		/**setter sur le password*/
		public function set password(value:String):void
		{
			if(srcUser.password != value)
				srcUser.password = value;
		}
		/**accesseur sur le fournisseur associé à l'utilisateur*/
		public function get supplier():Supplier
		{
			if(srcUser)
				return srcUser.supplier;
			
			return null;
		}
		
		/**setter sur le customer*/
		public function set customer(value:Customer):void
		{
			if(srcUser.customer != value)
				srcUser.customer = value;
		}
		
		/**getter sur le label affiché dans la mainBar*/
		public function get mainBarLabel():String
		{
			switch(roleStr)
			{
				case CultuConstants.ROLE_CUSTOMER:
				{
					if(customer)
						return customer.firstname + ' ' + customer.lastname;
				}
				case CultuConstants.ROLE_SUPPLIER:
				{
					if(supplier)
						return supplier.name;
				}
				case CultuConstants.ROLE_ADMIN:
				case CultuConstants.ROLE_OPERATOR:
				{
					return login;
				}
				default:
				{
					return '';
				}
			}
		}
	}
}